import sys
import os
import pygame
from pygame.constants import K_DOWN, K_ESCAPE, K_LEFT, KEYDOWN, RESIZABLE, K_a, K_s
# pygame：默认采用笛卡尔坐标系，左上角的顶点为（0，0）


def main():
    pygame.init()  # 内部各功能模块进行初始化创建和变量设置
    # 窗口居中
    os.environ['SDL_VIDEO_CENTERED'] = '1'
    size = width, height = 800, 600  # 设置窗口大小
    screen = pygame.display.set_mode(size, RESIZABLE)  # 初始化显示窗口,可变尺寸显示
    screen_rect = screen.get_rect()  # 获取窗口的矩形属性

    # 加载方式1（适用于任何普通图像）
    icon = pygame.image.load(
        r'C:\Users\vainuer\Desktop\Test\ORM\picture.jpg')
    pygame.display.set_icon(icon)  # 设置图标

    # 加载方式2（适用于普通图像，提高渲染速度）
    bg_img = pygame.image.load(
        r'C:\Users\vainuer\Desktop\Test\ORM\picture.jpg').convert()
    # screen.blit(bg_img, (0, 0))

    # 加载方式3（适用于有alpha通道的图像，并且可以提高渲染速度）
    mouse_img = pygame.image.load(
        r'C:\Users\vainuer\Desktop\Test\ORM\image.jpg').convert_alpha()
    # screen.blit(mouse_img, (180, 180))
    mouse_img_rect = mouse_img.get_rect()  # 获取图片的矩形属性

    pygame.display.set_caption('pygame模块')  # 设置显示窗口标题

    clock = pygame.time.Clock()  # 设置时钟对象

    while True:
        clock.tick(60)  # 设置循环帧率，每秒循环60次，防止大量占用CPU

        for event in pygame.event.get():  # 从pygame的事件队列中取出事件，并进行处理
            if event.type == pygame.QUIT:  # 获得事件类型，并逐类响应，点击X退出
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:  # 按Esc键响应退出
                    pygame.quit()
                    sys.exit()
            if event.type == pygame.KEYUP:
                if event.key == K_a or event.key == K_LEFT:
                    print('按下A-左键')
            if event.type == KEYDOWN:
                if event.key == K_s or event.key == K_DOWN:
                    print('按下S-下键')
        screen.blit(bg_img, (0, 0))

        # 获取鼠标位置,图片跟随鼠标移动
        x, y = pygame.mouse.get_pos()
        mouse_img_rect.center = (x, y)
        # 设置图片移动边界
        if mouse_img_rect.left < 0:
            mouse_img_rect.left = 0
        if mouse_img_rect.right > screen_rect.right:
            mouse_img_rect.right = screen_rect.right
        if mouse_img_rect.top < 0:
            mouse_img_rect.top = 0
        if mouse_img_rect.bottom > screen_rect.bottom:
            mouse_img_rect.bottom = screen_rect.bottom
        screen.blit(mouse_img, mouse_img_rect)
        pygame.display.update()  # 对显示窗口进行更新，默认窗口全部重绘

if __name__ == '__main__':
    # 图片随鼠标移动
    main()
